package com.zaimokuza.cn.mapper;

import com.zaimokuza.cn.entity.statistics.ManageStatisticsData;
import com.zaimokuza.cn.entity.statistics.UserBlogStatistics;
import com.zaimokuza.cn.entity.statistics.UserFollowStatistics;
import com.zaimokuza.cn.entity.statistics.UserStatisticsData;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.ArrayList;

/**
 * @author zaimokuza
 */
@Mapper
public interface StatisticsMapper {

    /**
     * 批量存储用户相关统计信息
     *
     * @param userStatisticsDataList 用户相关统计信息集合
     */
    void insertBatchUserRecord(@Param("list") ArrayList<UserStatisticsData> userStatisticsDataList);

    /**
     * 存储网站相关统计信息
     *
     * @param manageStatisticsData 网站相关统计信息
     */
    void insertManageRecord(ManageStatisticsData manageStatisticsData);

    /**
     * 根据日期批量删除用户相关统计信息
     *
     * @param date 日期
     */
    void deleteBatchUserRecord(String date);

    /**
     * 根据日期删除网站相关统计信息
     *
     * @param date 日期
     */
    void deleteManageRecord(String date);

    /**
     * 根据日期统计用户总博客数，总点赞数，总阅读数
     *
     * @param date 日期
     * @return 用户的博客相关统计信息
     */
    ArrayList<UserBlogStatistics> queryUserBlogStatistics(String date);

    /**
     * 根据日期统计用户总粉丝数
     *
     * @param date 日期
     * @return 用户总粉丝数
     */
    ArrayList<UserFollowStatistics> queryUserFollowers(String date);

    /**
     * 根据日期统计用户新增粉丝数
     *
     * @param date 日期
     * @return 用户新增粉丝数
     */
    ArrayList<UserFollowStatistics> queryUserFollowUp(String date);

    /**
     * 根据日期查询当天用户统计信息
     *
     * @param date 日期
     * @return 用户每日统计信息集合
     */
    ArrayList<UserStatisticsData> queryUserStatisticsDataListByDate(String date);

    /**
     * 查询用户总数
     *
     * @param date 日期
     * @return 用户总数
     */
    Long queryUserTotal(String date);

    /**
     * 查询博客总数
     *
     * @param date 日期
     * @return 博客总数
     */
    Long queryBlogTotal(String date);

    /**
     * 查询评论总数
     *
     * @param date 日期
     * @return 评论总数
     */
    Long queryCommentTotal(String date);

    /**
     * 查询IP总数
     *
     * @param date 日期
     * @return IP总数
     */
    Long queryIpTotal(String date);

    /**
     * 查询登录用户数量
     *
     * @param date 日期
     * @return 登录用户数量
     */
    Long queryLoginUserTotal(String date);

    /**
     * 根据日期查询网站统计信息
     *
     * @param date 日期
     * @return 网站统计信息
     */
    ManageStatisticsData queryMangeStatisticsDataByDate(String date);

    /**
     * 根据时间段查询当天用户统计信息
     *
     * @param userId    用户ID
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 用户每日统计信息集合
     */
    ArrayList<UserStatisticsData> queryUserStatisticsDataListByPeriod(@Param("userId") String userId, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 根据时间段查询登录率统计
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 登录率集合
     */
    ArrayList<ManageStatisticsData> queryLoginRateList(@Param("startDate") String startDate, @Param("endDate") String endDate);

}
